Skip to content

[pull] master from unlock-protocol:master#125

Merged
pull[bot] merged 2 commits intosearchableguy:masterfrom
unlock-protocol:master
Mar 22, 2026
Merged

[pull] master from unlock-protocol:master#125
pull[bot] merged 2 commits intosearchableguy:masterfrom
unlock-protocol:master

Conversation

@pull
Copy link

@pull pull bot commented Mar 22, 2026

See Commits and Changes for more details.


Created by pull[bot] (v2.0.0-alpha.4)

Can you help keep this open source service alive? 💖 Please sponsor : )

julien51 and others added 2 commits March 22, 2026 12:54
ci: replace opaque code-review plugin with direct review prompt

The code-review plugin only posts comments when it finds issues,
making it invisible on clean code. Replace with a direct prompt
that always posts a review (LGTM or issues found). Also drops
the plugin_marketplaces dependency entirely.

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
* feat: add governance delegation writes

* fix: pass tokenSymbol as prop to DelegateAccountPanel instead of reading from config

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix: thread tokenSymbol prop through to DelegateWalletPanel

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix: replace StateCard wallet-connect states with inline connect button

Show a simple "Connect wallet" button (using @unlock-protocol/ui Button)
when the user is not authenticated, matching the airdrops site UX pattern.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix: resolve ENS on mainnet and Basenames on Base

ENS names are registered on Ethereum mainnet; resolving them on Base
always fails. Use a mainnet JsonRpcProvider for ENS lookups and fall
back to a Base JsonRpcProvider for Basename resolution.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix: use shared staging Privy app ID from unlock-app as default

Falls back to the same staging Privy app used by unlock-app so wallet
connection works locally without setting NEXT_PUBLIC_PRIVY_APP_ID.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix: match Privy UI config to unlock-app

Use the same loginMethods, embeddedWallets, appearance, and _render
settings as unlock-app. Remove the canConnect dead-code guard since
privyAppId now always has a fallback value.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix: use AddressInput for delegate target field

Replace the plain Input with AddressInput from @unlock-protocol/ui,
which includes a clear button, wallet icon, and built-in ENS/Basename
resolution with debounce. Submit path validates the already-resolved
address from the input's onChange callback.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* feat: replace custom app shell header with HeaderNav + wallet connect

Use HeaderNav from @unlock-protocol/ui with governance nav links.
Add GovernanceHeader client component showing a Connect button when
unauthenticated and an address/sign-out menu when connected.
Add disconnect() to useGovernanceWallet via Privy's useLogout hook.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* feat: add Footer to governance app shell

Use the Footer component from @unlock-protocol/ui with governance-
relevant links (DAO, Forum, Snapshot, Docs, Roadmap, Blog).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* feat: add ConnectModal, TermsOfServiceModal, and fix header alignment

- ConnectModal: wraps Privy LoginModal with useConnectModal context
- TermsOfServiceModal: one-time ToS acceptance persisted in localStorage
- ConnectModalProvider: simple open/close state wired to Privy login()
- GovernanceHeader: use openConnectModal instead of calling login() directly
- GovernanceHeader: wrap HeaderNav in max-w-7xl container to fix full-width alignment

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix: mark AppShell as client component

Footer from @unlock-protocol/ui uses hooks without 'use client', which
causes a Next.js build error when imported from a server component.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix: constrain footer width to match page layout

Wrap Footer in max-w-7xl container to match the header and main
content alignment.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix: remove inline connect button from delegation panel

The header Connect button is the single entry point for wallet
connection. Remove the !authenticated branch with its Button, the
!address waiting StateCard, and all related hook destructuring
(connect, isReady, canConnect). Panel now renders null when no
wallet is connected. Also remove StateCard and ReactNode since
they are no longer needed. Update HeroCard copy to drop the
"Connect a wallet" prompt.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* refactor: collapse delegation panel into page

Flatten DelegateAccountPanel + DelegateWalletPanel into app/delegate/page.tsx
directly. The component file added indirection with no benefit — one page,
one component, all logic in one place. tokenSymbol is now fetched client-side
via useEffect so the page can be a client component.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix: remove unused canConnect from useGovernanceWallet

canConnect was only used in the old DelegateAccountPanel guard which
is now deleted. Also removes the governanceEnv import which was only
needed for that field.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix: remove dead code — getBrowserProvider, wallet, getGovernorInterface

None of these are consumed outside their definition files.
Inline the provider creation directly into ensureBaseNetwork.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix: use ethers ZeroAddress instead of local constant

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* feat: move delegation form to /delegates, remove /delegate route

Merges the personal delegation form (wallet balance, voting power,
delegate management) directly into the /delegates page above the
leaderboard. Removes the now-redundant /delegate route.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix: self-delegate button and refresh on logout

AddressInput manages its own internal state seeded from value on mount
and does not re-sync when the value prop changes externally. Use a reset
key to force remount when the value is set from outside (self-delegate
button or auto-fill from on-chain delegate).

Also call router.refresh() on logout so the UI clears correctly.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix: remove redundant connected wallet address from delegation form

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix: remove Personal Delegation label from delegates page header

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* ci: fix claude-code-review allowed_tools — use claude_args instead

allowed_tools was removed from claude-code-action@v1; the equivalent
is now claude_args: '--allowedTools ...'. Without this the review agent
cannot post PR comments.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Revert "ci: fix claude-code-review allowed_tools — use claude_args instead"

This reverts commit 4b1451b.

* fix: hide delegation form when not authenticated

Gate on authenticated (from usePrivy) in addition to address.
Privy can return a cached wallet address before the session is
confirmed, causing the form to show while the header still shows
"Connect".

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix: remove hero card from delegates page

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* feat: ENS/Basename resolution and per-row Delegate button in leaderboard

- Use <Address useName={...}> from @unlock-protocol/ui for all address
  display in leaderboard rows (resolves Basenames then ENS)
- Add per-row Delegate button that pre-fills the delegation form via
  ?delegate= query param
- Pre-format bigint values server-side before passing to client rows
  (bigints can't cross the server→client boundary in Next.js)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix: add comments to empty catch blocks to satisfy no-empty lint rule

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
@pull pull bot locked and limited conversation to collaborators Mar 22, 2026
@pull pull bot added the ⤵️ pull label Mar 22, 2026
@pull pull bot merged commit 5234db4 into searchableguy:master Mar 22, 2026
2 of 3 checks passed
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant